package controllers;

import play.*;
import play.db.DB;
import play.mvc.*;
import play.data.validation.*;
import utils.exceptions.BDException;

import java.util.Calendar;
import java.util.List;
import java.util.ArrayList;
import java.sql.Date;
import java.sql.Time;
import java.sql.Timestamp;

import dao.FachadaDAO;

import models.*;

public class AlunoMBean extends Controller {

	public static void index() {
        render();
    }
	
	public static void aluno() {
    	render("Aluno/Aluno.html");
    }
	
	public static void actionCadastrar(@Required String nome, @Required String cpf, @Required String rg, @Required String dataNascimento,
			@Required String login, @Required String senha, @Required String codTurma) {
	
		if(validation.hasErrors()) {
			render("Aluno/cadastroAluno.html");
		}		

		Aluno aluno = new Aluno ();
		aluno.setNome(params.get("nome"));
		aluno.setRg(params.get("rg",Long.class));
		aluno.setCpf(params.get("cpf",Long.class));
		aluno.setDataNascimento(Date.valueOf(params.get("dataNascimento")));
		aluno.setRua(params.get("rua"));
		if (!params.get("numero").isEmpty())
			aluno.setNumero(params.get("numero",Integer.class));
		if (!params.get("cep").isEmpty())
			aluno.setCep(params.get("cep",Long.class));
		aluno.setBairro(params.get("bairro"));
		aluno.setCidade(params.get("cidade"));
		aluno.setEstado(params.get("estado"));
		aluno.setComplemento(params.get("complemento"));
		if (!params.get("telefone1").isEmpty())
			aluno.setTelefone1(params.get("telefone1",Long.class));
		if (!params.get("telefone2").isEmpty())
			aluno.setTelefone2(params.get("telefone2",Long.class));
		aluno.setEmail(params.get("email"));
		aluno.setLogin(params.get("login"));
		aluno.setSenha(params.get("senha"));
		aluno.setMatricula(Long.parseLong(Calendar.getInstance().get(Calendar.YEAR) + params.get("codTurma") + params.get("rg")));
		aluno.setDataMatricula(new Date(System.currentTimeMillis()));
		aluno.setCodTurma(params.get("codTurma",Long.class));
		
		try {
			FachadaDAO.getInstance().cadastrarAluno(aluno);
			render("Aluno/cadastroAlunoRealizado.html");
		} catch (BDException e) {
			Erro erro = e.getErro();
			render("errors/erro.html",erro);
		}
	}
	
	public static void actionEditar(@Required String nome, @Required String cpf, @Required String rg, @Required String dataNascimento,
			@Required String login, @Required String senha, @Required String codTurma) {
		
		if(validation.hasErrors()) {
			render("Aluno/editarAluno.html");
		}
		
		Aluno aluno;
		try {
			aluno = FachadaDAO.getInstance().buscarAluno(Long.valueOf(cpf));
			
			aluno.setNome(params.get("nome"));
			aluno.setRg(params.get("rg",Long.class));
			aluno.setCpf(params.get("cpf",Long.class));
			aluno.setDataNascimento(Date.valueOf(params.get("dataNascimento")));
			aluno.setRua(params.get("rua"));
			if (!params.get("numero").isEmpty())
				aluno.setNumero(params.get("numero",Integer.class));
			if (!params.get("cep").isEmpty())
				aluno.setCep(params.get("cep",Long.class));
			aluno.setBairro(params.get("bairro"));
			aluno.setCidade(params.get("cidade"));
			aluno.setEstado(params.get("estado"));
			aluno.setComplemento(params.get("complemento"));
			if (!params.get("telefone1").isEmpty())
				aluno.setTelefone1(params.get("telefone1",Long.class));
			if (!params.get("telefone2").isEmpty())
				aluno.setTelefone2(params.get("telefone2",Long.class));
			aluno.setEmail(params.get("email"));
			aluno.setLogin(params.get("login"));
			aluno.setSenha(params.get("senha"));
			aluno.setMatricula(Long.parseLong(Calendar.getInstance().get(Calendar.YEAR) + params.get("codTurma") + params.get("rg")));
			aluno.setDataMatricula(new Date(System.currentTimeMillis()));
			aluno.setCodTurma(params.get("codTurma",Long.class));
			
			FachadaDAO.getInstance().editarAluno(aluno);
			listarAluno();
		} catch (BDException e) {
			Erro erro = e.getErro();
			render("errors/erro.html",erro);
		}
	}
	
	public static void actionRemover(String cpf) {
		try {
			FachadaDAO.getInstance().excluirAluno(Long.valueOf(cpf));
			listarAluno();
		} catch (BDException e) {
			Erro erro = e.getErro();
			render("errors/erro.html",erro);
		}
	}
	
	public static void actionBuscarAlterar(String cpf) {
		try {
			Aluno aluno = FachadaDAO.getInstance().buscarAluno(Long.valueOf(cpf));
			render("Aluno/editarAluno.html",aluno);
		} catch (BDException e) {
			Erro erro = e.getErro();
			render("errors/erro.html",erro);
		}
	}
	
	public static void actionBuscar(String cpf) {
		try {
			Aluno aluno = FachadaDAO.getInstance().buscarAluno(Long.valueOf(cpf));
			render("Aluno/buscarAluno.html",aluno);
		} catch (BDException e) {
			Erro erro = e.getErro();
			render("errors/erro.html",erro);
		}
	}
	
	public static void cadastrarAluno () {
		List<Turma> turmas = new ArrayList<Turma>();
		try {
			turmas = FachadaDAO.getInstance().listarTurmas();
			render("Aluno/cadastroAluno.html",turmas);
		} catch (BDException e) {
			Erro erro = e.getErro();
			render("errors/erro.html",erro);
		}
    }
	
	public static void voltar () {
    	render("Aluno/cadastroAluno.html");
    }
	
	public static void buscarAluno () {
    	render("Aluno/buscarAluno.html");
    }
	
	public static void alterarAluno () {
    	render("Aluno/editarAluno.html");
    }
	
	public static void editarAluno(long cpf) {
		Aluno aluno;
		List<Turma> turmas = new ArrayList<Turma>();
		try {
			turmas = FachadaDAO.getInstance().listarTurmas();
			aluno = FachadaDAO.getInstance().buscarAluno(cpf);
			render("Aluno/editarAluno.html",aluno,turmas);
		} catch (BDException e) {
			Erro erro = e.getErro();
			render("errors/erro.html",erro);
		}
    }

    public static void listarAluno () {
    	List<Aluno> alunos = new ArrayList<Aluno>();
		try {
			alunos = FachadaDAO.getInstance().listarAlunos();
			render("Aluno/listarAluno.html",alunos);
		} catch (BDException e) {
			Erro erro = e.getErro();
			render("errors/erro.html",erro);
		}
    }
    
    public static void listarAlunoProf(long idAula, String codDisc) {
    	List<Aluno> alunos = new ArrayList<Aluno>();		
    	try {
			alunos = FachadaDAO.getInstance().listarAlunosProf(idAula);
			String nome = Application.getProf().getNome();
			render("Aluno/AlunoProf/listarAlunoProf.html",alunos,codDisc,idAula,nome);
		} catch (BDException e) {
			Erro erro = e.getErro();
			render("errors/erro.html",erro);
		}
    }
    
    public static void editarAlunoProf(long cpf, long idAula, String codDisc){
    	Aluno aluno;
		try {
			String nome = Application.getProf().getNome();
			aluno = FachadaDAO.getInstance().buscarAluno(cpf);
			render("Aluno/AlunoProf/editarAlunoProf.html",aluno, idAula, codDisc,nome);
		} catch (BDException e) {
			Erro erro = e.getErro();
			render("errors/erro.html",erro);
		}
    }
    
    public static void actionEditarNotas(long nata1, long nota2, String cpf, long idAula, String codDisc){
    			
		Aluno aluno;
		try {
			aluno = FachadaDAO.getInstance().buscarAluno(Long.valueOf(cpf).longValue());
			
			aluno.setNota1(Long.valueOf(params.get("nota1")).longValue());
			aluno.setNota2(Long.valueOf(params.get("nota2")).longValue());
			
			
			FachadaDAO.getInstance().editarAluno(aluno);
			listarAlunoProf(idAula, codDisc);
			
		} catch (BDException e) {
			Erro erro = e.getErro();
			render("errors/erro.html",erro);
		}
    }
    
}
